В мире разработки на C++ есть множество задач, при которых приходится писать большое количество boilerplate-кода: сериализация, RPC, ORM, биндинги к скриптовым языкам и т. п. И, раузмеется, существуют множество подходов, упрощающих написание такого кода для, скажем, для сериализации: писать всё руками, положить всё в макросы, притащить шаблоны во главе с Hana, комбинировать одно с другим. Но есть один подход, который в конечном должен заменить все остальные: кодогенерация.
json, bson, xml, yaml, protobuf - вариантов форматов, в которых можно сохранять данные, великое множество. Для каждого формата есть свои библиотеки, и не одна. Библиотеки настойчиво предлагают свой собственный способ описания данных, а некоторые - так и целую инфраструктуру, под которую надо подстраиваться самому, подстраивать код. А это - не всегда удобно, так как хочется свободы. Хочется, чтобы исходный текст как можно меньше зависел от того, каким образом сериализуются данные. И современные средства кодогенерации могут предоставить эту свободу, надо лишь знать, как правильно их применить.